# -*- coding: utf-8 -*-

# modulo de operações sobre uma base de dados sqlite3
# demostra um teste na criacao
# de base de dados
# Elisio Goncalves Ribeiro

import sqlite3
import re

    
    
##
#
def operacoes_bd(endereco):
    '''
    agrupamento das operações requeridas pela aplicação para criação
    da base de dados, das tabelas o seu preenchimento etc
    '''
    
    try:
        conn = criar_base_dados(endereco)   #fechar o cursor e retornar uma ligacao a bd
    except:
        print ' ## ERRO ##\n Erro na criacao de base de dados'
        return
    else:                     
        return endereco
    pass
##    criar_views()
##    criar_consultas()
pass


##
def ligar_a_bd(endereco_bd):
    '''
    Ligar ao endereco fonecido e retornar uma 
    ligação a base de dados criada
        endereco_bd -> caminho ou nome do ficheiro a ligar ou criar
    '''
    try:
        endereco_bd = endereco_bd.encode("utf8")        
        # conexao/criacao no disco da Base de Dados
        bd_con = sqlite3.connect(endereco_bd)
        
    except:
        print "\n\t ## AVISO! ##\n\t Verifiquue o endereço da Base de Dados!"
        return
    else:
        print "\n Ligação Estabelecida\n"
        return bd_con                               #retorna uma ligação a bd
    pass
pass


##
#
def guardar_desligar_bd(bd_con, cursor):
    
    try:
        cursor.close()
        bd_con.commit()
    except: 
        print 'ERRO ao desligar'
        return
    pass
pass


##
#criar e guardar a informaçao num ficheiro no disco 
def criar_base_dados(endereco_bd):
    '''
    Criação de um ficheiro para base de dados no disco em formato sqlite3
    para guardar os dados retirados de um ficheiro excel
        endereco_bd -> nome ou endereço do ficheiro a criar
    '''
    
    print "\n A Criar Base de Dados...\n"
    bd_con = ligar_a_bd(endereco_bd)
    cursor = bd_con.cursor()
    if (cursor == None):
        print 'erro a criar cursor'
        guardar_desligar_bd(bd_con, cursor)
        return
    pass
    criar_tabelas(cursor)
   
    guardar_desligar_bd(bd_con, cursor)
pass


##
def criar_tabelas(cursor):
    
##    sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_1 (area VARCHAR(50), ano VARCHAR(10))".format(
##        nome_tabela, campos)
    
    try:
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_1 (id1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, sexo VARCHAR(20), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_2 (id2 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, subsistema_ensino VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_3 (id3 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, area VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_4 (id4 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nivel_formacao VARCHAR(50), sexo VARCHAR(20), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_5 (id5 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, idade CHAR(10), total_inscritos CHAR(10), pop_residente CHAR(10), taxa_escolar CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
        sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_6 (id6 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nuts_2 VARCHAR(50), nuts_3 VARCHAR(50), concelho VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_Stmt)
    except: 
        print ' ## ERRO ##\n Ocorreu erro na criação de tabelas'
    else:
        print ' Tabelas Criadas'
pass

##
def criar_tabelas1(cursor, sql_stmt):
    
##    sql_Stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_1 (area VARCHAR(50), ano VARCHAR(10))".format(
##        nome_tabela, campos)
    
    try:
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_1 (id1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, sexo VARCHAR(20), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_2 (id2 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, subsistema_ensino VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_3 (id3 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, area VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_4 (id4 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nivel_formacao VARCHAR(50), sexo VARCHAR(20), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_5 (id5 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, idade CHAR(10), total_inscritos CHAR(10), pop_residente CHAR(10), taxa_escolar CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
        sql_stmt = "CREATE TABLE IF NOT EXISTS Tabela_1_6 (id6 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, nuts_2 VARCHAR(50), nuts_3 VARCHAR(50), concelho VARCHAR(50), inscritos CHAR(10), ano CHAR(10))"
        cursor.execute(sql_stmt)
    except: pass
    print ' Tabelas Criadas'
pass
##
#
def preencher_tabelas(lst_dados, cursor, sql_stmt):
    '''
    '''
    try:
        cursor.executemany(sql_stmt, lst_dados)
    except: 
        print ' ## ERRO ##\n Ocorreu um erro com os dados'
    else:
        print ' Operação Concluida'
##    for ln in range(len(lst_dados)):
##        
##        cursor.execute(sql_Stmt, lst_dados[ln])
##    pass
pass
    
    
